﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SW_SoftBully.Controllers;
using SW_SoftBully.Models.ModuloAdministracion.Proveedor;
using System.Data.SqlClient;
using log4net;

namespace SW_SoftBully.Models.ModuloAdministracion.Proveedor
{
    public class ProveedorDAO
    {
        public List<ProveedorBean> ListarProveedor(ProveedorBean proveedor)
        {
            try
            {
                List<ProveedorBean> listaProveedor = new List<ProveedorBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM proveedor where estado=1";

                if (!string.IsNullOrEmpty(proveedor.RazonSocial))
                {
                    commandString += " AND RazonSocial LIKE '%" + proveedor.RazonSocial + "%'";
                }

                if (proveedor.RUC > 0)
                {
                    commandString += " AND RUC = " + proveedor.RUC;
                }


                if (proveedor.Id_Departamento > 0)
                {
                    commandString += " AND id_departamento = " + proveedor.Id_Departamento;
                }

                if (proveedor.Id_Provincia > 0)
                {
                    commandString += " AND id_provincia = " + proveedor.Id_Provincia;
                }

                if (proveedor.Id_Distrito > 0)
                {
                    commandString += " AND id_distrito = " + proveedor.Id_Distrito;
                }

                if (!string.IsNullOrEmpty(proveedor.Direccion)) {
                    commandString += " AND Direccion LIKE '%" + proveedor.Direccion + "%'"; 
                }

                if (!string.IsNullOrEmpty(proveedor.Telefono))
                {
                    commandString += " AND Telefono LIKE '%" + proveedor.Telefono + "%'";
                }

                if (!string.IsNullOrEmpty(proveedor.Pagina_Web))
                {
                    commandString += " AND Pagina_Web LIKE '%" + proveedor.Pagina_Web + "%'";
                }

                if (!string.IsNullOrEmpty(proveedor.Cargo_Contacto))
                {
                    commandString += " AND Cargo_Contacto LIKE '%" + proveedor.Cargo_Contacto + "%'";
                }

                if (!string.IsNullOrEmpty(proveedor.Contacto))
                {
                    commandString += " AND Contacto LIKE '%" + proveedor.Contacto + "%'";
                }

                if (!string.IsNullOrEmpty(proveedor.Correo))
                {
                    commandString += " AND Correo LIKE '%" + proveedor.Correo + "%'";
                }

                if (!string.IsNullOrEmpty(proveedor.Telefono_Contacto))
                {
                    commandString += " AND Telefono_Contacto LIKE '%" + proveedor.Telefono_Contacto + "%'";
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    ProveedorBean Proveedor = new ProveedorBean();
                    Proveedor.Id_Proveedor = Convert.ToInt32(dataReader["id_proveedor"]);
                    Proveedor.RazonSocial = Convert.ToString(dataReader["RazonSocial"]);
                    Proveedor.Direccion = Convert.ToString(dataReader["Direccion"]);
                    Proveedor.Telefono = Convert.ToString(dataReader["Telefono"]);
                    Proveedor.Id_Distrito = Convert.ToInt32(dataReader["id_distrito"]);
                    Proveedor.Contacto = Convert.ToString(dataReader["contacto"]);
                    Proveedor.Telefono_Contacto = Convert.ToString(dataReader["telefono_contacto"]);
                    Proveedor.Observaciones = Convert.ToString(dataReader["observaciones"]);
                    Proveedor.Correo = Convert.ToString(dataReader["correo"]);
                    Proveedor.Cargo_Contacto = Convert.ToString(dataReader["cargo_contacto"]);
                    Proveedor.Pagina_Web = Convert.ToString(dataReader["pagina_web"]);
                    Proveedor.Estado = Convert.ToInt32(dataReader["estado"]);
                    Proveedor.RUC = Convert.ToDouble(dataReader["RUC"]);
                    Proveedor.Id_Provincia = Convert.ToInt32(dataReader["id_provincia"]);
                    Proveedor.Id_Departamento = Convert.ToInt32(dataReader["id_departamento"]);
                    listaProveedor.Add(Proveedor);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaProveedor;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                proveedor.conexion = men;
                return null;
            }
        }

        public Boolean ExisteProveedor(ProveedorBean proveedor)
        {
            try {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT * FROM Proveedor WHERE RUC = '" + proveedor.RUC + "' AND estado = 1";


                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                if (dataReader.Read())
                {
                    dataReader.Close();
                    sqlCon.Close();
                    return true;
                }
                else
                {
                    sqlCon.Close();
                    dataReader.Close();
                    return false;
                }
            }
            catch {
                return false;
            }
        }


        public string RegistrarProveedor(ProveedorBean proveedor)
        {
            try{
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "INSERT INTO Proveedor (RazonSocial, RUC, Id_Departamento, Id_Provincia, Id_Distrito, Direccion, Telefono, Pagina_Web, Cargo_Contacto, Contacto, Correo, Telefono_Contacto, Observaciones, Estado) " +
                                      " VALUES ('" + proveedor.RazonSocial + "'," + proveedor.RUC + "," + proveedor.Id_Departamento + "," + proveedor.Id_Provincia + "," + proveedor.Id_Distrito + ",'" + proveedor.Direccion + "','" + proveedor.Telefono + "','" + proveedor.Pagina_Web + "','" + proveedor.Cargo_Contacto + "','" + proveedor.Contacto + "','" + proveedor.Correo + "','" + proveedor.Telefono_Contacto + "','" + proveedor.Observaciones + "',1)"; 

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                proveedor.conexion = "Bien";
            }
            catch (Exception e){
                String men = e.ToString();
                proveedor.conexion = men;
            }

            return proveedor.conexion;
        }

        public string EliminarProveedor(ProveedorBean proveedor)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "UPDATE Edificio SET Estado = 0 WHERE Id_Proveedor = " + proveedor.Id_Proveedor + "";
                
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                proveedor.conexion = "Bien";
            }
            catch (Exception e)
            {
                String men = e.ToString();
                proveedor.conexion = men;
            }
            return proveedor.conexion;
        }

        public string ModificarProveedor(ProveedorBean proveedor)
        {
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "UPDATE Proveedor SET " +
                                       "RazonSocial = '" + proveedor.RazonSocial + "', " +
                                       "RUC = " + proveedor.RUC + ", " +
                                       "Id_Departamento = " + proveedor.Id_Departamento + ", " +
                                       "Id_Provincia = " + proveedor.Id_Provincia + ", " +
                                       "Id_Distrito = " + proveedor.Id_Distrito + ", " +
                                       "Direccion = '" + proveedor.Direccion + "' , " +
                                       "Telefono = '" + proveedor.Telefono + "', " +
                                       "Pagina_Web = '" + proveedor.Pagina_Web + "', " +
                                       "Cargo_Contacto = '" + proveedor.Cargo_Contacto + "', " +
                                       "Contacto = '" + proveedor.Contacto + "', " +
                                       "Correo = '" + proveedor.Correo + "', " +
                                       "Telefono_Contacto = '" + proveedor.Telefono_Contacto + "', " +
                                       "Observaciones = '" + proveedor.Observaciones + "' " +
                                       "WHERE Id_Proveedor = " + proveedor.Id_Proveedor + "";

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                proveedor.conexion = "Bien";

            }
            catch (Exception e)
            {
                String men = e.ToString();
                proveedor.conexion = men;
            }
            return proveedor.conexion;
        }

        public List<ProveedorBean> ListarProveedorMiguel(ProveedorBean proveedor)
        {
            try
            {
                List<ProveedorBean> listaProveedor = new List<ProveedorBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["SoftBully"].ConnectionString;

                SqlConnection sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "SELECT p.id_proveedor, p.RazonSocial, p.Direccion, d.Nombre, prov.Nombre, dist.Nombre, p.Telefono, p.id_distrito, p.contacto, p.telefono_contacto, p.observaciones," +
                                       " p.correo, p.cargo_contacto, p.pagina_web, p.estado, p.RUC, p.id_provincia, p.id_departamento" +
                                       " FROM proveedor p, edificio e, departamento_lugar d, provincia prov, distrito dist" +
                                       " WHERE p.estado=1 AND e.id_edificio = " + proveedor.id_edificio + " AND d.id_departamento = p.id_departamento AND prov.id_provincia = p.id_provincia AND p.id_distrito = dist.id_distrito";

                if (!string.IsNullOrEmpty(proveedor.RazonSocial))
                {
                    commandString += " AND p.RazonSocial LIKE '%" + proveedor.RazonSocial + "%'";
                }

                if (proveedor.RUC > 0)
                {
                    commandString += " AND p.RUC = " + proveedor.RUC;
                }


                if (proveedor.Id_Departamento > 0)
                {
                    commandString += " AND p.id_departamento = " + proveedor.Id_Departamento;
                }
                else
                {
                    commandString += " AND (p.id_departamento = e.id_departamento OR p.id_departamento = 15)";
                }

                if (proveedor.Id_Provincia > 0)
                {
                    commandString += " AND p.id_provincia = " + proveedor.Id_Provincia ;
                }
                else
                {
                    commandString += " AND (p.id_provincia = e.id_provincia OR p.id_provincia = 1501)";
                }

                if (proveedor.Id_Distrito > 0)
                {
                    commandString += " AND p.id_distrito = " + proveedor.Id_Distrito;
                }

                System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + commandString);
                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    ProveedorBean Proveedor = new ProveedorBean();
                    Proveedor.Id_Proveedor = Convert.ToInt32(dataReader["id_proveedor"]);
                    Proveedor.RazonSocial = Convert.ToString(dataReader["RazonSocial"]);
                    Proveedor.Direccion = Convert.ToString(dataReader["Direccion"]);
                    Proveedor.nombre_departamento = Convert.ToString(dataReader["Nombre"]);
                    Proveedor.nombre_provincia = Convert.ToString(dataReader[4]);
                    Proveedor.nombre_distrito = Convert.ToString(dataReader[5]);
                    Proveedor.Telefono = Convert.ToString(dataReader["Telefono"]);
                    Proveedor.Id_Distrito = Convert.ToInt32(dataReader["id_distrito"]);
                    Proveedor.Contacto = Convert.ToString(dataReader["contacto"]);
                    Proveedor.Telefono_Contacto = Convert.ToString(dataReader["telefono_contacto"]);
                    Proveedor.Observaciones = Convert.ToString(dataReader["observaciones"]);
                    Proveedor.Correo = Convert.ToString(dataReader["correo"]);
                    Proveedor.Cargo_Contacto = Convert.ToString(dataReader["cargo_contacto"]);
                    Proveedor.Pagina_Web = Convert.ToString(dataReader["pagina_web"]);
                    Proveedor.Estado = Convert.ToInt32(dataReader["estado"]);
                    Proveedor.RUC = Convert.ToDouble(dataReader["RUC"]);
                    Proveedor.Id_Provincia = Convert.ToInt32(dataReader["id_provincia"]);
                    Proveedor.Id_Departamento = Convert.ToInt32(dataReader["id_departamento"]);
                    listaProveedor.Add(Proveedor);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaProveedor;
            }
            catch (Exception e)
            {
                String men = e.ToString();
                proveedor.conexion = men;
                return null;
            }
        }
    }
}